﻿

Public Class FrmActPedido

    Dim controller As New Class_RC_Controller.rc_Notas
    Dim clientes As New Class_RC_Controller.rc_Clientes
    Dim productos As New Class_RC_Controller.rc_Productos
    Dim servicios As New Class_RC_Controller.rc_Servicios

    Private _codNota As Integer = 0

    Public Property codNota() As Integer
        Get
            Return _codNota
        End Get
        Set(value As Integer)
            _codNota = value
        End Set
    End Property

    Private _codServicio As Integer = 0

    Public Property codServicio() As Integer
        Get
            Return _codServicio
        End Get
        Set(value As Integer)
            _codServicio = value
        End Set
    End Property

    Private _codProducto As Integer = 0

    Public Property codProducto() As Integer
        Get
            Return _codProducto
        End Get
        Set(value As Integer)
            _codProducto = value
        End Set
    End Property

    Private _codNotaDetalle As Integer = 0

    Public Property codNotaDetalle() As Integer
        Get
            Return _codNotaDetalle
        End Get
        Set(value As Integer)
            _codNotaDetalle = value
        End Set
    End Property

    Private Sub btncancelar_Click(sender As System.Object, e As System.EventArgs) Handles btncancelar.Click
        Me.Close()
    End Sub

    Private Function ControlEstadoFinalizado(codActividadActual As Integer) As Boolean

        If controller.get_Mov_Notas_Act_Finalizada(oiml.dbConn, codNotaDetalle, codActividadActual) Then
            Return True
        Else
            Return False
        End If

    End Function

    Private Function ControlOrdenEstado(codActividad As Integer, codActividadActual As Integer) As Boolean
        If Not dsAct Is Nothing Then

            Dim ordenAct As Integer = 0

            For i As Integer = 0 To dsAct.Rows.Count - 1

                If dsAct.Rows(i)("codActividad").ToString = codActividadActual Then

                    If dsAct.Rows.Count >= (i + 1) Then

                        If dsAct.Rows(i + 1)("codActividad").ToString = codActividad Then
                            Return True
                        Else
                            Return False
                        End If

                    End If

                End If

            Next

            Return True

        End If

    End Function

    Private Sub btnactualizar_Click(sender As System.Object, e As System.EventArgs) Handles btnActualizar.Click
        Try

            If MessageBox.Show("Esta seguro de actualizar la actividad o estado del producto/servicio?", "Confirmar", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

                If codNota > 0 And codNotaDetalle > 0 Then

                    Dim idActividad As Integer = 0
                    Dim idActividadActual As Integer = dgNotasDetalle.SelectedRows(0).Cells(3).Value

                    If IsNumeric(cboActividad.SelectedValue) Then
                        idActividad = cboActividad.SelectedValue
                    End If

                    If idActividadActual <> idActividad Then

                        If Not ControlEstadoFinalizado(idActividadActual) Then
                            MessageBox.Show("Debe finalizar la actividad actual, favor verifique", "Control actividades", MessageBoxButtons.OK, MessageBoxIcon.Stop)
                            Exit Sub
                        End If

                        If Not ControlOrdenEstado(idActividad, idActividadActual) Then
                            MessageBox.Show("Debe seleccionar la actividad siguiente, favor verifique el orden", "Control actividades", MessageBoxButtons.OK, MessageBoxIcon.Stop)
                            Exit Sub
                        End If

                    End If

                    Dim idResponsable As Integer = 0

                    If IsNumeric(cboResponsable.SelectedValue) Then
                        idResponsable = cboResponsable.SelectedValue
                    End If

                    Dim fechaFinAct As String = ""

                    If cbxFechaFinAct.Checked And cboEstadoAct.Text = "FINALIZADO" Then
                        fechaFinAct = dtpFechaFinAct.Value.ToString()
                    ElseIf Not cbxFechaFinAct.Checked And cboEstadoAct.Text = "FINALIZADO" Then
                        fechaFinAct = DateTime.Now.ToShortDateString
                    End If

                    If (idActividadActual <> idActividad) Or dgNotasDetalleActividad.Rows.Count = 0 Then

                        If controller.Insert_Mov_Notas(oiml.dbConn, idActividad, idResponsable, oiml.idUsuario, cboEstadoAct.Text,
                                                   dtpFechaActividad.Value, fechaFinAct, txtobs.Text, codNotaDetalle, codNota,
                                                   oiml.codEstadoProduccionNota) Then
                            CargarNota(True, True)
                            CargarMovDetalles()

                            txtobs.Text = ""
                            cbxFechaFinAct.Checked = False

                        Else
                            MessageBox.Show("Error: " & controller.MessageError.Message, "Pedidos", MessageBoxButtons.OK, MessageBoxIcon.Error)

                        End If

                    Else

                        If controller.Update_Mov_Notas(oiml.dbConn, idActividadActual, idResponsable, oiml.idUsuario, cboEstadoAct.Text,
                                                       fechaFinAct, txtobs.Text, codNotaDetalle, codNota, oiml.codEstadoCierreNota) Then
                            CargarNota(True, True)
                            CargarMovDetalles()

                            txtobs.Text = ""
                            cbxFechaFinAct.Checked = False

                        Else
                            MessageBox.Show("Error: " & controller.MessageError.Message, "Pedidos", MessageBoxButtons.OK, MessageBoxIcon.Error)

                        End If

                    End If

                End If

            End If

        Catch ex As Exception
            MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub

    Private Sub btnBuscarPedido_Click(sender As System.Object, e As System.EventArgs) Handles btnBuscarPedido.Click
        Dim frmBuscador As New BuscPedido
        frmBuscador.soloPendientes = True
        frmBuscador.pNroNota = txtbuscanro.Text

        If cbxEstado.Checked Then
            frmBuscador.pEstado = cboEstado.SelectedValue
        End If

        frmBuscador.ShowDialog()

        txtnombre.Text = frmBuscador.pCliente
        txtContacto.Text = frmBuscador.pContacto
        txtruc.Text = frmBuscador.pRuc
        codNota = frmBuscador.pCodNota
        txtbuscanro.Text = frmBuscador.pNroNota

        CargarNota(True, True)

    End Sub

    Private Sub CargarDetalles()
        If codNota > 0 Then

            Dim dt As New DataTable
            dt = controller.get_Notas_Detalles_All(oiml.dbConn, codNota, False, False, False)
            If Not dt Is Nothing Then
                dgNotasDetalle.DataSource = dt

                If dt.Rows.Count > 0 Then
                    dgNotasDetalle.Select()
                    SeleccionarProducto()
                    CargarMovDetalles()
                End If

            End If

        End If
    End Sub

    Private Sub CargarMovDetalles()
        If codNota > 0 And codNotaDetalle > 0 Then

            Dim dt As New DataTable
            dt = controller.get_Mov_Notas_ByID(oiml.dbConn, codNotaDetalle, False)

            If Not dt Is Nothing Then
                dgNotasDetalleActividad.DataSource = dt
            Else
                dgNotasDetalleActividad.DataSource = Nothing
            End If

        End If

    End Sub

    Private Sub CargarNota(conDetalle As Boolean, controlServicio As Boolean)
        Try
            If codNota > 0 Then

                Dim ds As New DataTable
                ds = controller.get_Notas_ByID(oiml.dbConn, codNota)

                If Not ds Is Nothing Then
                    'cargar los controles del formulario con los valores de los campos del registro
                    codNota = ds.Rows(0)("codNota").ToString
                    Me.txtNroPedido.Text = ds.Rows(0)("nroNota").ToString
                    Me.dtpfecha.Value = DateTime.Parse(ds.Rows(0)("fecha").ToString())
                    Me.dtpfechaVto.Value = DateTime.Parse(ds.Rows(0)("fechaVencimiento").ToString())

                    If ds.Rows(0)("codEstadoNota").ToString = oiml.codEstadoCierreNota Then
                        cargarEstadoNota(0)
                        Me.cboEstado.SelectedValue = ds.Rows(0)("codEstadoNota").ToString
                        Me.btnActualizar.Enabled = False
                    Else
                        Me.cboEstado.SelectedValue = ds.Rows(0)("codEstadoNota").ToString
                        Me.btnActualizar.Enabled = True
                    End If

                    Me.txtPedidoEstado.Text = ds.Rows(0)("descEstadoNota").ToString
                    Me.txtTotal.Text = ds.Rows(0)("totalDetalle").ToString
                    Me.lblUsuario.Text = ds.Rows(0)("usuario").ToString
                    Me.lblfechaActualizacion.Text = ds.Rows(0)("fechaActualizacion_").ToString

                    If (conDetalle) Then
                        CargarDetalles()
                        'ControlEstado()
                    End If

                    If controlServicio Then

                        If controller.Control_Estado_Finalizado(oiml.dbConn, codNota, oiml.codEstadoCierreNota, oiml.idUsuario) Then
                            If Not controller.Control_Estado_Finalizado_Servicio(oiml.dbConn, codNota, oiml.codEstadoCierreNota, oiml.idUsuario) Then
                                MessageBox.Show("Error: " & controller.MessageError.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                            Else
                                CargarNota(False, False)
                                txtobs.Text = ""
                                cbxFechaFinAct.Checked = False
                            End If
                        End If

                    End If

                End If

            Else

                ' cargar los controles del formulario con los valores de los campos del registro
                codNota = 0

                Me.txtNroPedido.Text = ""
                Me.dtpfecha.Value = DateTime.Now
                Me.dtpfechaVto.Value = DateTime.Now
                Me.txtTotal.Text = 0
                Me.txtnombre.Text = ""
                Me.txtContacto.Text = ""
                Me.txtruc.Text = ""
                Me.lblUsuario.Text = ""
                Me.lblfechaActualizacion.Text = ""

                dgNotasDetalle.DataSource = Nothing
                dgNotasDetalleActividad.DataSource = Nothing
                codProducto = 0
                llenarCombos_Actividad()

            End If

        Catch ex As Exception
            MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub

    Private Sub SeleccionarProducto()
        Try
            If dgNotasDetalle.SelectedRows.Count > 0 Then

                codNotaDetalle = dgNotasDetalle.SelectedRows(0).Cells(0).Value

                If dgNotasDetalle.SelectedRows(0).Cells(1).Value.ToString <> "" Then
                    codProducto = dgNotasDetalle.SelectedRows(0).Cells(1).Value
                Else
                    codProducto = 0
                End If

                llenarCombos_Actividad()

                If dgNotasDetalle.SelectedRows(0).Cells(2).Value.ToString() <> "" Then
                    codServicio = dgNotasDetalle.SelectedRows(0).Cells(2).Value

                    Dim dsEmpl As DataTable
                    dsEmpl = productos.get_empleados(oiml.dbConn)
                    With Me.cboResponsable
                        .DataSource = dsEmpl
                        .DisplayMember = "empleado"
                        .ValueMember = "codEmp"
                    End With

                Else
                    codServicio = 0

                End If

                CargarMovDetalles()

            End If

        Catch ex As Exception
            MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try
    End Sub

    Dim dsAct As DataTable

    Private Sub llenarCombos_Actividad()
        If codProducto > 0 And codNotaDetalle Then

            dsAct = controller.get_actividad_producto(oiml.dbConn, codProducto, codNotaDetalle)

            If Not dsAct Is Nothing Then
                With Me.cboActividad
                    .DataSource = dsAct
                    .DisplayMember = "descActividad"
                    .ValueMember = "codActividad"
                End With

                llenarCombos_Responsable()
                llenarCombos_Sector()

            Else

                If Not controller.Control_Estado_Finalizado(oiml.dbConn, codNota, oiml.codEstadoCierreNota, oiml.idUsuario) Then

                    If Not controller.MessageError Is Nothing Then
                        MessageBox.Show("Error: " & controller.MessageError.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    End If

                Else
                    CargarNota(False, True)
                    txtobs.Text = ""
                    cbxFechaFinAct.Checked = False
                End If

                Me.cboActividad.DataSource = Nothing
                Me.cboResponsable.DataSource = Nothing
                Me.cboSector.DataSource = Nothing
                Me.cboArea.DataSource = Nothing

            End If

        Else

            Me.cboActividad.DataSource = Nothing
            Me.cboResponsable.DataSource = Nothing
            Me.cboSector.DataSource = Nothing
            Me.cboArea.DataSource = Nothing

        End If

    End Sub

    Private Sub llenarCombos_Responsable()
        If (IsNumeric(cboActividad.SelectedValue)) Then
            Dim dsRespon As DataTable
            dsRespon = controller.get_responsable_actividad_notas(oiml.dbConn, cboActividad.SelectedValue)
            If Not dsRespon Is Nothing Then
                With Me.cboResponsable
                    .DataSource = dsRespon
                    .DisplayMember = "empleado"
                    .ValueMember = "codEmp"
                End With

            Else
                cboResponsable.DataSource = Nothing

            End If

        End If

    End Sub

    Private Sub llenarCombos_Sector()

        If (IsNumeric(cboActividad.SelectedValue)) Then
            Dim dsSector As DataTable
            dsSector = controller.get_sector_actividad(oiml.dbConn, cboActividad.SelectedValue)
            If Not dsSector Is Nothing Then
                With Me.cboSector
                    .DataSource = dsSector
                    .DisplayMember = "descSector"
                    .ValueMember = "codSector"
                End With

                llenarCombos_Areas()

            Else
                cboSector.DataSource = Nothing
                cboArea.DataSource = Nothing

            End If

        Else
            cboArea.DataSource = Nothing

        End If

    End Sub

    Private Sub llenarCombos_Areas()

        If (IsNumeric(cboSector.SelectedValue)) Then
            Dim dsA As DataTable
            dsA = controller.get_area_sector(oiml.dbConn, cboSector.SelectedValue)
            If Not dsA Is Nothing Then
                With Me.cboArea
                    .DataSource = dsA
                    .DisplayMember = "descArea"
                    .ValueMember = "codArea"
                End With
            Else

                cboArea.DataSource = Nothing

            End If

        End If

    End Sub

    Private Sub cargarEstadoNota(codEstadoNota As Integer)
        Dim ds As DataTable
        ds = controller.get_estado_notas(oiml.dbConn, codEstadoNota)
        With cboEstado
            .DataSource = ds
            .DisplayMember = "descEstadoNota"
            .ValueMember = "codEstadoNota"
        End With
    End Sub

    Private Sub FrmActPedido_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

        dtpFechaActividad.Value = DateTime.Now
        dtpFechaFinAct.Value = DateTime.Now
        cargarEstadoNota(oiml.codEstadoCierreNota)
        cboEstadoAct.SelectedIndex = 0
        dgNotasDetalle.AutoGenerateColumns = False
        dgNotasDetalleActividad.AutoGenerateColumns = False

    End Sub

    Private Sub btnCancelarPedido_Click(sender As System.Object, e As System.EventArgs) Handles btnCancelarPedido.Click
        txtbuscanro.Text = ""
        cbxEstado.Checked = False
        codNota = 0
        CargarNota(True, True)
        txtbuscanro.Focus()
    End Sub

    Private Sub txtbuscanro_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles txtbuscanro.KeyDown
        If e.KeyCode = Keys.Enter Then
            btnBuscarPedido_Click(sender, e)
        End If

    End Sub

    Private Sub cboEstado_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles cboEstado.KeyDown
        If e.KeyCode = Keys.Enter Then
            btnBuscarPedido_Click(sender, e)
        End If

    End Sub

    Private Sub dgNotasDetalle_Click(sender As System.Object, e As System.EventArgs) Handles dgNotasDetalle.Click
        SeleccionarProducto()
    End Sub

    Private Sub btnSalir_Click(sender As System.Object, e As System.EventArgs) Handles btnSalir.Click
        Me.Close()
    End Sub

    Private Sub cbxFechaFinAct_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles cbxFechaFinAct.CheckedChanged
        dtpFechaFinAct.Enabled = cbxFechaFinAct.Checked
    End Sub

    Private Sub cboActividad_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboActividad.SelectedIndexChanged
        llenarCombos_Areas()
        llenarCombos_Responsable()
        llenarCombos_Sector()
    End Sub


    
End Class